package main

import (
	"fmt"
	"github.com/salviati/go-qt5/qt5"
	"io/ioutil"
	"os/exec"
)

var (
	exit = make(chan bool)
)

func main() {
	qt5.Main(func() {
		go ui_main()
		qt5.Run()
		exit <- true
	})
}

func ui_main() {
	w := qt5.NewWidget()
	w.SetWindowTitle("RemastersysQT") //设置窗口标题
	w.SetSizev(300, 150)              //设置窗口大小

	//==================== VBox 1 ====================

	vbox1 := qt5.NewVBoxLayout() //创建一个竖向排列的容器

	btn0 := qt5.NewButtonWithText("安装Remastersys")
	btn1 := qt5.NewButtonWithText("备份系统")
	btn2 := qt5.NewButtonWithText("清理临时文件")
	btn3 := qt5.NewButtonWithText("制作镜像")
	btn4 := qt5.NewButtonWithText("制作仅系统镜像")

	vbox1.AddWidget(btn0) //向容器内添加控件
	vbox1.AddWidget(btn1)
	vbox1.AddWidget(btn2)
	vbox1.AddWidget(btn3)
	vbox1.AddWidget(btn4)

	//==================== VBox 2 ====================

	vbox2 := qt5.NewVBoxLayout()

	lbl0 := qt5.NewLabelWithText("如果你还没有安装Remastersys，请先安装")
	lbl1 := qt5.NewLabelWithText("备份你的整个系统（包括/home），并生成ISO")
	lbl2 := qt5.NewLabelWithText("清理上次制作ISO所生成的临时文件")
	lbl3 := qt5.NewLabelWithText("生成一个可发布又包括你的个人资料的ISO")
	lbl4 := qt5.NewLabelWithText("生成一个可发布但是不包括你个人资料的ISO")

	vbox2.AddWidget(lbl0)
	vbox2.AddWidget(lbl1)
	vbox2.AddWidget(lbl2)
	vbox2.AddWidget(lbl3)
	vbox2.AddWidget(lbl4)

	//==================== HBox1 ====================

	hbox1 := qt5.NewHBoxLayout() //创建一个横向排列的容器

	hbox1.AddLayout(vbox1) //向容器内添加容器
	hbox1.AddLayout(vbox2)

	//==================== BOX END ====================

	btn0.OnClicked(func() { //这里分开两个文件执行的原因是为了替代sudo -i
		t := `#!/bin/bash
rm RemastersysQT.sh
echo 请输入密码：
sudo sh RemastersysQT_.sh`
		ioutil.WriteFile("RemastersysQT.sh", []byte(t), 0644) //保存数据到文件
		cmd := exec.Command("exo-open", "--launch", "TerminalEmulator", "sh", `RemastersysQT.sh`)
		err := cmd.Start() //不用cmd.Run()的原因是会崩溃
		if err != nil {
			fmt.Println(err)
		}
		//cmd.Wait()//这里本来想写入同一文件来着，结果崩溃，就分开写了
		t = `#!/bin/bash
rm RemastersysQT_.sh
echo 'deb http://www.remastersys.com/ubuntu quantal main' >> /etc/apt/sources.list && apt-get update && apt-get install remastersys
echo 执行完毕，按回车结束
read anykey`
		ioutil.WriteFile("RemastersysQT_.sh", []byte(t), 0644)
	})

	btn1.OnClicked(func() {
		t := `#!/bin/bash
rm RemastersysQT.sh
echo 请输入密码
sudo remastersys backup
echo 执行完毕，按回车结束
read anykey`
		ioutil.WriteFile("RemastersysQT.sh", []byte(t), 0644) //保存数据到文件
		cmd := exec.Command("exo-open", "--launch", "TerminalEmulator", "sh", `RemastersysQT.sh`)
		err := cmd.Start()
		if err != nil {
			fmt.Println(err)
		}
	})

	btn2.OnClicked(func() {
		t := `#!/bin/bash
rm RemastersysQT.sh
echo 请输入密码
sudo remastersys clean
echo 执行完毕，按回车结束
read anykey`
		ioutil.WriteFile("RemastersysQT.sh", []byte(t), 0644) //保存数据到文件
		cmd := exec.Command("exo-open", "--launch", "TerminalEmulator", "sh", `RemastersysQT.sh`)
		err := cmd.Start()
		if err != nil {
			fmt.Println(err)
		}
	})

	btn3.OnClicked(func() {
		t := `#!/bin/bash
rm RemastersysQT.sh
echo 请输入密码
sudo remastersys dist
echo 执行完毕，按回车结束
read anykey`
		ioutil.WriteFile("RemastersysQT.sh", []byte(t), 0644) //保存数据到文件
		cmd := exec.Command("exo-open", "--launch", "TerminalEmulator", "sh", `RemastersysQT.sh`)
		err := cmd.Start()
		if err != nil {
			fmt.Println(err)
		}
	})

	btn4.OnClicked(func() {
		t := `#!/bin/bash
rm RemastersysQT.sh
echo 请输入密码
sudo remastersys dist cdfs
echo 执行完毕，按回车结束
read anykey`
		ioutil.WriteFile("RemastersysQT.sh", []byte(t), 0644) //保存数据到文件
		cmd := exec.Command("exo-open", "--launch", "TerminalEmulator", "sh", `RemastersysQT.sh`)
		err := cmd.Start()
		if err != nil {
			fmt.Println(err)
		}
	})

	w.SetLayout(hbox1)

	defer w.Close()
	w.Show()
	<-exit
}
